"""
@Project : pythonExample
@File    : 函数.py
@IDE     : PyCharm
@Author  : RR9
@Date    : 2024/08/26 10:29
@Explain :
"""
"""函数
小写字母和下划线（snake_case）命名，避免使用系统内置名称、缩写，使用下划线_分割单词
函数文档属性：function_name.__doc__
函数注解属性：function_name.__annotations__
"""


def avg_anyargs(*args) -> str:
    """avg_anyargs(*args)

    :param args: 1,2,3,4,5
    :return: 返回平均值保留2位小数及收集的位置参数
    """
    result = sum(args) / len(args)
    return f""" 平均值：{round(result, 2)}, 收集的参数: {args}"""


def sum_anykwds(**kwds) -> str:
    """sum_anykwds(**kwds)

    :param kwds: name = '茅台', add = '贵州'
    :return: 返回键值对数及收集的关键字参数
    """
    return f""" 键值对数：{len(kwds)}, 收集的参数: {kwds} """


def default_arg(a1, a2='默认参数值'):
    """default_arg(a1, a2='默认参数值')

    调用函数时，不传参数将使用默认参数，否则使用传递参数
    :param a1:
    :param a2:
    :return:
    """
    return a1, a2


"""lambda函数
lambda arguments: expression

:argument 参数，使用逗号分隔
:return expression

argument的值是执行时的值，外部修改与影响返回结果，与函数默认值完全相反

同样使用默认参数，可以解决这个问题
funcs = [lambda x, n=n: x+n for n in range(5)]
for f in funcs:
    print(f(0))

不要将lambda表达式赋值给一个变量
常用作高阶函数的参数时（如filter(), map(), sorted()的key参数等）
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filtered_numbers = list(filter(lambda x: x % 2 == 0, numbers))
"""
